home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / linux-ab.1 / linux-abuse.1.1.0.tar / abuse-1.10 / lisp / duong.lsp < prev    next >
Lisp/Scheme  |  1995-10-23  |  11KB  |  420 lines

  1. ;; Copyright 1995 Crack dot Com,  All Rights reserved
  2. ;; See licensing information for more details on usage rights
  3.        
  4.  
  5. (defun mine_ai ()
  6.   (if (or (eq (total_objects) 0) (not (eq (with_object (get_object 0) (aistate)) 0)))
  7.       (select (aistate)
  8.           (0 (if (touching_bg)
  9.              (progn (set_state running)
  10.                 (if (eq (xvel) 1)
  11.                 (progn
  12.                   (with_object (bg)
  13.                            (make_view_solid (find_rgb 250 10 10)))
  14.                   (hurt_radius (x) (y) 40 35 nil 20))
  15.                   (hurt_radius (x) (y) 40 25 nil 20))
  16.                 (go_state 1))
  17.            (next_picture))
  18.            T)
  19.           (1 (next_picture)))
  20.     T))
  21.  
  22.  
  23.  
  24.  
  25. (def_char CONC
  26.   (funs (ai_fun  mine_ai))
  27.   (fields  ("xvel" "flash [1=on]"))
  28.   (states "art/chars/mine.spe"
  29.       (running   (seq "mine" 1 8))
  30.       (stopped    '("mine0001.pcx" "mine_off"))))
  31.  
  32.  
  33.  
  34. (defun air_mine_ai ()
  35.   (if (or (eq (total_objects) 0)                                 ;; turned on?
  36.       (not (eq (with_object (get_object 0) (aistate)) 0)))
  37.  
  38.       (if (touching_bg)
  39.       (progn
  40.         (if (eq (xvel) 1)
  41.         (with_object (bg) (make_view_solid (find_rgb 250 10 10))))
  42.         (do_explo 40 25)
  43.         nil)
  44.     (progn (next_picture)
  45.            T))
  46.     T))
  47.  
  48. (def_char CONC_AIR
  49.   (funs (ai_fun  air_mine_ai))
  50.   (fields  ("xvel" "flash [1=on]"))
  51.   (states "art/chars/mine.spe"
  52.       (stopped   (seq "amin" 1 2))))
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59. (defun bomb_cons ()
  60.   (setq blink_time 14))
  61.  
  62. (defun bomb_ai ()
  63.   (select (aistate)
  64.       (0 ;; wait for a signal if connected, or wait for player touch
  65.        (if (activated)
  66.            (go_state 1)
  67.          T))
  68.  
  69.       (1 ;; count down blink time until zero then blow up
  70.        (if (< blink_time 1)
  71.            (go_state 2)
  72.          (progn
  73.            (if (or (< blink_time 10)
  74.                (and (< blink_time 18) (eq (mod blink_time 2) 0))
  75.                (and (< blink_time 30) (eq (mod blink_time 3) 0))
  76.                (and (< blink_time 50) (eq (mod blink_time 4) 0)))
  77.            (progn
  78.              (play_sound TICK_SND 127 (x) (y))
  79.              (next_picture)))
  80.            (setq blink_time (- blink_time 1))
  81.            T)))
  82.  
  83.       (2 ;; blow up
  84.        (let ((oldy (y)))
  85.          (set_y (- (y) (/ (picture_height) 2)))
  86.          (do_explo 40 (get_ability jump_yvel))
  87.          (if (> (get_ability jump_yvel) 100)
  88.          (add_object EXPLODE1 (+ (x) (random 10)) (+ (+ (random 10) (y)) -20)     0))
  89.          (set_y oldy))
  90.        nil)))
  91.   
  92.       
  93.                  
  94. (def_char BOMB
  95.   (funs (ai_fun      bomb_ai)
  96.     (constructor bomb_cons))
  97.   (abilities (jump_yvel 30))
  98.   (range 150 150)
  99.   (vars blink_time)
  100.   (fields ("blink_time" "blink time"))
  101.   (states "art/chars/mine.spe"
  102.       (stopped '("abomb0001.pcx" "abomb0002.pcx"))))
  103.  
  104. (def_char BIG_BOMB
  105.   (funs (ai_fun      bomb_ai)
  106.     (constructor bomb_cons))
  107.   (abilities (jump_yvel 400))
  108.   (range 150 150)
  109.   (vars blink_time)
  110.   (fields ("blink_time" "blink time"))
  111.   (states "art/chars/mine.spe"
  112.       (stopped '("abomb0001.pcx+" "abomb0002.pcx+"))))
  113.       
  114.  
  115.  
  116.  
  117. (defun block_ai ()
  118.   (if (<= (hp) 0)
  119.       (if (eq (state) dieing)
  120.       (next_picture)
  121.     (progn
  122.       (play_sound CRUMBLE_SND 127 (x) (y))
  123.       (set_state dieing)
  124.       T))
  125.     T))
  126.  
  127. (def_char BLOCK
  128.                     ;block has only 1 frame now will have block blowing up
  129.   (funs (ai_fun  block_ai))
  130.   (flags (can_block T)
  131.      (hurtable  T))
  132.   (abilities (start_hp 30))
  133.   (states "art/chars/block.spe"
  134.       (stopped       "block.pcx")
  135.       (dieing        (seq "bexplo" 1 7))))
  136.  
  137.  
  138. (defun trap_door_ai ()
  139.   (if (> (total_objects) 0)
  140.       (select (aistate)
  141.           (0 ;; wait for switch to go off
  142.            (if (not (eq (with_object (get_object 0) (aistate)) 0))
  143.            (progn 
  144.              (set_state running)
  145.              (go_state 1))))
  146.           (1 ;; wait for animation
  147.            (if (next_picture) T
  148.          (progn
  149.            (set_state blocking)
  150.            (set_aistate 2))))
  151.           (2 ;; just stay here 
  152.            T)))
  153. T)
  154.       
  155.  
  156. (defun strap_door_ai ()
  157.   (general_sdoor_ai nil))
  158.  
  159.  
  160. (def_char TRAP_DOOR2
  161.   (funs (ai_fun strap_door_ai))
  162.   (flags (can_block T))
  163.   (abilities (start_hp 30))
  164.   (states "art/chars/tdoor.spe"
  165.       (stopped        "tdor0001.pcx")
  166.       (running        (seq "tdor" 1 7))
  167.       (walking        (seq "tdor" 7 1))
  168.       (blocking       "tdor0007.pcx")))
  169.  
  170.  
  171. (def_char TRAP_DOOR3
  172.   (funs (ai_fun strap_door_ai))
  173.   (flags (can_block T))
  174.   (abilities (start_hp 30))
  175.   (states "art/chars/tdoor.spe"
  176.           (stopped        "cdor0001.pcx")
  177.           (running        (seq "cdor" 1 7))
  178.           (walking        (seq "cdor" 7 1))
  179.           (blocking       "cdor0007.pcx")))
  180.  
  181. (defun lightin_ai ()
  182.   (if (or (eq (total_objects) 0) (not (eq (with_object (get_object 0) (aistate)) 0)))
  183.       (select (aistate)
  184.           (0  ;; delay
  185.            (if (< (state_time) (* (aitype) 2)) (set_state stopped)
  186.          (progn
  187.                     ;         (hurt_radius (x) (y) 40 30 nil 30)
  188.            (set_state running)
  189.            (play_sound ELECTRIC_SND 127 (x) (y))
  190.            (go_state 1))))
  191.           (1  ;; next picture
  192.            (if (next_picture) T
  193.          (set_aistate 0)))))
  194. T)
  195.  
  196. (def_char LIGHTIN
  197.   (funs (ai_fun lightin_ai))
  198.   (flags (can_block T))
  199.   (fields  ("aitype" "flash_speed 0..9"))
  200.   (states "art/chars/lightin.spe"
  201.       (running   (seq "lite" 1 9))
  202.       (stopped    "lite0001.pcx")))
  203.       
  204.  
  205.  
  206. (defun lava_ai ()
  207.   (if (and (touching_bg) (eq (mod (state_time) 20) 0))
  208.       (do_damage 6 (bg)))
  209.  
  210.   (select (aistate)
  211.       (0 (if (eq (random 100) 0)
  212.          (progn
  213.            (play_sound LAVA_SND 64 (x) (y))
  214.            (set_aistate 1)))
  215.          (next_picture))
  216.       (1 (next_picture)
  217.          (if (eq (state_time) 5)
  218.          (progn
  219.            (hurt_radius (x) (y) 20 20 nil 10)
  220.            (set_aistate 0)))))
  221.   T)
  222.  
  223.  
  224. (def_char LAVA
  225.   (funs (ai_fun lava_ai))
  226.   (states  "art/chars/lava.spe"
  227.        (stopped (seq "lava" 1 15))))
  228.  
  229.  
  230. (defun tp2_ai ()
  231.   (if (> (total_objects) 0)
  232.       (select (aistate)
  233.           (0 ;; wait for player to activate
  234.            (if (touching_bg)
  235.            (progn
  236.              (if (with_object (bg) (local_player))
  237.              (show_help telep_msg))
  238.              (if (with_object (bg) (pressing_action_key))
  239.              (progn
  240.                (link_object (bg))
  241.                (set_state running)
  242.                (play_sound TELEPORTER_SND 127 (x) (y))
  243.                (set_aistate 1))))))
  244.           (1 ;; wait for animation
  245.            (if (next_picture)
  246.            (let ((x (x))
  247.              (y (- (y) 16))
  248.              (fade (if (< (current_frame) 16) (current_frame) 15)))
  249.              (with_object (get_object 1) 
  250.                   (progn
  251.                     (set_x x) 
  252.                     (set_y y) 
  253.                     (user_fun SET_FADE_COUNT fade)
  254.                     (setq is_teleporting 1)
  255.                     )))
  256.          (let ((x (with_object (get_object 0) (x)))
  257.                (y (with_object (get_object 0) (- (y) 16))))           
  258.            (with_object (get_object 1)
  259.                 (progn 
  260.                   (set_x x)
  261.                   (set_y y)
  262.                   (setq is_teleporting 0)
  263.                   (user_fun SET_FADE_COUNT 0)
  264.                   ))
  265.            (remove_object (get_object 1))
  266.            (set_aistate 0))))))
  267.   T)
  268.          
  269.                
  270.  
  271. (def_char TELE2
  272.   (funs  (ai_fun tp2_ai))
  273.   (flags (can_block  T))
  274.   (states "art/chars/teleport.spe"
  275.       (stopped "close")
  276.       (running (seq "elec" 1 15))))
  277.      
  278.  
  279. (defun bolder_ai ()
  280.   (if (or (eq (total_objects) 0) (not (eq (with_object (get_object 0) (aistate)) 0)))
  281.       (if (eq (hp) 0)
  282.       (progn
  283.         (play_sound P_EXPLODE_SND 127 (x) (y))
  284.         (add_object EXPLODE1 (+ (x) (random 5)) (+ (y) (random 5)) 0)
  285.         (add_object EXPLODE1 (+ (x) (random 5)) (+ (y) (random 5)) 2)
  286.         (add_object EXPLODE1 (- (x) (random 5)) (- (y) (random 5)) 1)
  287.         (add_object EXPLODE1 (- (x) (random 5)) (- (y) (random 5)) 2)
  288.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel -4) (set_yvel -8)))
  289.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel 4) (set_yvel -9)))
  290.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel 2) (set_yvel -5)))
  291.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel -3) (set_yvel -5)))
  292.         (with_object (add_object SMALL_BOLDER (x) (y)) (progn (set_xvel -1) (set_yvel 2)))
  293.         (add_object EXP_LIGHT (x) (y) 100)
  294.         nil)
  295.     (progn
  296.       (next_picture)
  297.       (set_yvel (+ (yvel) 1))      
  298.       (let ((old_yv  (yvel))
  299.         (old_xv  (xvel))
  300.         (old_x   (x))
  301.         (old_y   (y))
  302.         (status (float_tick)))
  303.  
  304.         (let ((new_x (x))
  305.           (new_y (y))
  306.           (set_x old_x)
  307.           (set_y old_y))
  308.           (platform_push (- new_x (x)) (- new_y (y)))
  309.           (set_x new_x)
  310.           (set_y new_y))
  311.         (hurt_radius (x) (y) 19 30 (me) 15)
  312.         (if (not (eq status T));; T means we did not hit anything    
  313.         (let ((block_flags (car status)))
  314.           (if (or (blocked_up block_flags) (blocked_down block_flags));; bounce up/down
  315.               (progn
  316.             (if (> (abs old_yv) 3)
  317.                 (play_sound SBALL_SND 127 (x) (y)))
  318.             (set_xvel old_xv)
  319.             (if (> old_yv 1)
  320.                 (set_yvel (- 2 old_yv))
  321.               (set_yvel (- 0 old_yv))))
  322.             (if (or (blocked_left block_flags) (blocked_right block_flags));; bounce left/right
  323.             (progn
  324.               (set_yvel old_yv)
  325.               (set_xvel (- 0 old_xv))))))))
  326.       T))
  327.     T))
  328.   
  329.  
  330. (defun bolder_cons ()
  331.   (set_xvel -4)
  332.   (set_yvel 0))
  333.  
  334.  
  335. (defun bold_dam (amount from hitx hity push_xvel push_yvel) 
  336.   (add_object EXPLODE3 (+ (x) (- 10 (random 20))) (- (y) (random 30)) 0)
  337.   (damage_fun amount from hitx hity (/ push_xvel 10) (/ push_yvel 2)))
  338.  
  339. (def_char BOLDER
  340.   (funs  (ai_fun bolder_ai)
  341.      (damage_fun bold_dam)
  342.      (constructor bolder_cons))
  343.   (flags (can_block  T)
  344.      (add_front  T)
  345.      (hurtable   T))
  346.   (range 200 200)
  347.   (abilities (start_hp 40))
  348.   (fields ("xvel" "xvel")      
  349.       ("yvel" "yvel")
  350.       ("hp"   "hp")
  351.       )
  352.   (states "art/bold.spe"
  353.       (stopped '("bold0001.pcx" "bold0001.pcx" "bold0001.pcx" 
  354.             "bold0002.pcx" "bold0002.pcx" "bold0002.pcx"
  355.             "bold0003.pcx" "bold0003.pcx" "bold0003.pcx"
  356.             "bold0004.pcx" "bold0004.pcx" "bold0004.pcx"))))
  357.  
  358. (defun bounce_move (left_stub right_stub up_stub down_stub nothing_stub)
  359.   (let ((old_yv  (yvel))
  360.     (old_xv  (xvel))
  361.     (status (float_tick)))
  362.     (if (not (eq status T)) ;; T means we did not hit anything    
  363.     (let ((block_flags (car status)))            
  364.       (if (blocked_up block_flags) ;; bounce up/down
  365.           (progn
  366.         (set_xvel old_xv)
  367.         (if (> old_yv 1)
  368.             (set_yvel (- 2 old_yv))
  369.           (set_yvel (- 0 old_yv)))
  370.         (eval up_stub))
  371.         (if (blocked_down block_flags)
  372.         (progn
  373.           (set_xvel old_xv)
  374.           (if (> old_yv 1)
  375.               (set_yvel (- 2 old_yv))
  376.             (set_yvel (- 0 old_yv)))
  377.           (eval down_stub))
  378.           (if (blocked_left block_flags)
  379.           (progn
  380.             (set_yvel old_yv)
  381.             (set_xvel (- 0 old_xv))
  382.             (eval left_stub))
  383.         (if (blocked_right block_flags)
  384.             (progn
  385.               (set_yvel old_yv)
  386.               (set_xvel (- 0 old_xv))
  387.               (eval right_stub)))))))
  388.       (eval nothing_stub))))
  389.           
  390.  
  391.  
  392. (defun small_rock_ai ()
  393.   (next_picture)
  394.   (set_yvel (+ (yvel) 1))
  395.   (bounce_move T T T            
  396.            '(progn (add_object EXPLODE1 (+ (x) (random 10)) (- (+ (random 5) (y)) 10)     0)               
  397.          (add_object EXPLODE1 (- (x) (random 10)) (- (- (y) (random 5)) 10) 2)
  398.          (play_sound P_EXPLODE_SND 127 (x) (y))
  399.          (hurt_radius (x) (y) 40 15 (if (> (total_objects) 0)
  400.                         (get_object 0)
  401.                           nil) 20)
  402.          nil) T))
  403.   
  404.  
  405. (def_char SMALL_BOLDER
  406.   (funs  (ai_fun small_rock_ai))
  407.  
  408.   (flags (add_front  T)
  409.      (unlistable T))
  410.     
  411.   (states "art/bold.spe"
  412.       (stopped "bsmall")))
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.